
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void handler(int sig)
{
    pid_t id;
    //这里waitpid里参数1 的-1表示回收任意一个子进程，参数3：WNOHANG表示非阻塞式回收
    while( (id = waitpid(-1, NULL, WNOHANG)) > 0)
    {
        printf("wait child success: %d\n", id);
    }
    printf("child is quit! %d\n", getpid());
}
int main()
{
    // signal(SIGCHLD, handler);
    signal(SIGCHLD, SIG_IGN);

    
    pid_t cid;
    if((cid = fork()) == 0)
    {   //child
        printf("child : %d\n", getpid());
        sleep(3);
        exit(1);
    }
    //父进程
    while(1)
    {
        printf("father proc is doing some thing!\n");
        sleep(1);
    }
    return 0;
}



































// #include <stdio.h>
// #include <signal.h>
// #include <unistd.h>

// //volatile：保持内存可见性
// volatile int quit = 0;
// void handler(int signo)
// {
//     printf("%d 信号被捕捉 \n",signo);
//     printf("quit : %d",quit);
//     quit = 1;
//     printf("->  %d\n",quit);
// }
// int main()
// {
//     signal(2,handler);

//     while(!quit);
   
//     printf("进程退出\n");
//     return 0;
// }